package com.jdy.haoduoai.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

import com.jdy.haoduoai.util.Tools;
import com.ycsj.goldmedalnewconcept.R;

//import com.jdy.haoduoai.R;

public class WordWrapView extends ViewGroup {
  private static int PADDING_HOR = 15;// 水平方向padding
  private static int PADDING_VERTICAL = 8;// 垂直方向padding
  private static int SIDE_MARGIN = 10;// 左右间距
  private static int TEXT_MARGIN = 10;

  private int backgroundShapeRid = R.drawable.label_cloud_normal;

  private final int TextViewBackground = Color.argb(255, 194, 194, 194);

  /**
   * @param context
   */
  public WordWrapView(Context context) {
    this(context, null);
  }

  /**
   * @param context
   * @param attrs
   */
  public WordWrapView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  /**
   * @param context
   * @param attrs
   * @param defStyle
   */
  public WordWrapView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    float ratio = Tools.getPixelRatio(context);
    PADDING_HOR = (int) (Tools.getPixelByDip(context, 10) * ratio);// 水平方向padding
    PADDING_VERTICAL = (int) (Tools.getPixelByDip(context, 5) * ratio);// 垂直方向padding
    SIDE_MARGIN = (int) (Tools.getPixelByDip(context, 5) * ratio);// 左右间距
    TEXT_MARGIN = (int) (Tools.getPixelByDip(context, 5) * ratio);
    if (isInEditMode())
      return;
    final TypedArray typedArray = context.obtainStyledAttributes(attrs,
        R.styleable.WordWrapView);
    backgroundShapeRid = typedArray.getResourceId(
        R.styleable.WordWrapView_backgroundShape, backgroundShapeRid);
    typedArray.recycle();
  }

  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int childCount = getChildCount();
    int autualWidth = r - l;
    int x = SIDE_MARGIN;// 横坐标开始
    int y = 0;// 纵坐标开始
    int rows = 1;
    for (int i = childCount - 1; i >= 0; i--) {// should range from 0 to
                                               // childCount
      View view = getChildAt(i);
      // view.setBackgroundColor(TextViewBackground);
      view.setBackgroundResource(backgroundShapeRid);
      int width = view.getMeasuredWidth();
      int height = view.getMeasuredHeight();
      x += width + TEXT_MARGIN;
      if (x > autualWidth) {
        x = width + SIDE_MARGIN;
        rows++;
      }
      y = rows * (height + TEXT_MARGIN);
      if (i == childCount - 1) {// this should be equals to 0 when add view by
                                // order!
        view.layout(x - width - TEXT_MARGIN, y - height, x - TEXT_MARGIN, y);
      } else {
        view.layout(x - width, y - height, x, y);
      }
    }
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int x = 0;// 横坐标
    int y = 0;// 纵坐标
    int rows = 1;// 总行数
    int specWidth = MeasureSpec.getSize(widthMeasureSpec);
    int actualWidth = specWidth - SIDE_MARGIN * 2;// 实际宽度
    int childCount = getChildCount();
    for (int index = 0; index < childCount; index++) {
      View child = getChildAt(index);
      child.setPadding(PADDING_HOR, PADDING_VERTICAL, PADDING_HOR,
          PADDING_VERTICAL);
      child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
      int width = child.getMeasuredWidth();
      int height = child.getMeasuredHeight();
      x += width + TEXT_MARGIN;
      if (x > actualWidth) {// 换行
        x = width;
        rows++;
      }
      y = rows * (height + TEXT_MARGIN);
    }
    setMeasuredDimension(actualWidth, y);
  }

}